 public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @param k int整型
     * @return ListNode类

     */


    private ListNode reverseList(ListNode head){

        if(head==null){
            return head;
        }

        ListNode d=new ListNode(-1);
        d.next=head;
        ListNode pre=d;
        ListNode cur=head;
//cur!=null&&cur.next!=null才能不出现空指针
        while(cur!=null&&cur.next!=null){
            ListNode temp=cur.next;
            cur.next=cur.next.next;
            temp.next=pre.next;
            pre.next=temp;
        }
        return d.next;

    }
    public ListNode reverseKGroup (ListNode head, int k) {

        ListNode dummary=new ListNode(-1);

        dummary.next=head;

        ListNode pre=dummary;
        ListNode end=dummary;


        while(end!=null){
            for(int i=0;i<k&&end!=null;i++){
                end=end.next;
            }
            if(end==null){
                //有可能链表没有k长度了，就直接跳出循环
                break;
            }

            ListNode next=end.next;
            end.next=null;

            ListNode start=pre.next;
            pre.next=null;

            pre.next=reverseList(start);

            start.next=next;

            pre=start;
            end=start;
        }
        return dummary.next;
    }
}
